<?php
	
	class CCsv
	{
		static function &GetInstance()
		{
			global $g_hObjects;
			static $m_hApp = NULL;
							
			if(!isset($m_hApp))
			{
				$m_hApp = new CCsv();
				$g_hObjects[] = $m_hApp;
				$m_hApp->OnInit();
			}
			
			return $m_hApp;
		}
		
		function OnInit()
		{	
		}
		
		function OnDestroy()
		{
		}
		
		//dokonaj exportu do pliku csv ktory moze byc odczytany przez excel'a
		function Export($aTable,$aColsNames = array(),$szOutName = 'out',$szOutEnc = 'cp1250')
		{
			$szCsv = '';
			
			if($aColsNames != array())
			{
				foreach($aColsNames as $szVal)
				{
					$szVal = stripslashes($szVal);
					$szCsv.= '"'.$szVal.'",';
				}
				
				$szCsv .= "\n";
			}
			
			//przetwarzamy wiersz
			foreach($aTable as $aRow)
			{
				//przetwarzamy kolumny
				foreach($aRow as $szKey => &$szVal)
				{
					$szVal = stripslashes($szVal);
					$szCsv.= '"'.$szVal.'",';
				}
				
				//tniemy prawy przecinek
				$szCsv = rtrim($szCsv,',');
				
				$szCsv .= "\n";
			}
			
			//zabezpieczamy content przed cacheowaniem
			header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
			header("Pragma: no-cache");
			header("Expires: 0");
			
			//wymuszamy pobieranie jako zalacznik
			header('Content-type: text/x-csv');
			header('Content-Disposition: attachment; filename='.$szOutName.'_'.date("Y_m_d").'_'.date("H_i_s").'.csv');
			
			//konwersja znakow na 
			
			//$szCsv = mb_convert_encoding($szCsv,'ISO-8859-2','ASCII,UTF-8');
			$szCsv = iconv('UTF-8',$szOutEnc,$szCsv);
			
			echo $szCsv;
		}
		
		//importuje dane z pliku csv
		//
		// dane wyjsciowe w formacie utf8
		//
		// $szFile 			- nazwa pliku
		// $iMaxCols 		- max. ilosc kolumn we wszystkich liniach (uzyteczne w przypadku plikow z excel'a
		// $bSkipFirstLine  - pomin pierwsza linie z pliku csv (czesto w excelu sa to nazwy kolumn stad warto to pominac 
		function &Import(&$szFile,$iMaxCols = '',$iMaxLines = '',$bSkipFirstLine = false)
		{
			$hFile  = fopen($szFile, "r");
			$aTable = array();
			
			$iLineCnt = 0;
			
			while($aCurrLine = fgetcsv($hFile,null,';') )
			{
				//pusta linie pomijamy
				if(empty($aCurrLine))  
					continue;
				
					
				if($bSkipFirstLine && $iLineCnt == 0)
				{
					$iLineCnt++;
					continue;
				}
					
				if($iMaxLines && $iLineCnt > $iMaxLines)
					break;
					
				//licznik linii
				$iLineCnt++;
					
				//array
				$aLine = array();
				
				//ograniczenie ilosci kolumn
				$iColsCnt = count($aCurrLine);
				$iColsCnt = ($iMaxCols && $iColsCnt > $iMaxCols) ? $iMaxCols : $iColsCnt;
				
				foreach($aCurrLine as &$szVal)
				{
					if(--$iColsCnt < 0)
						break;
					
					$szEnc = mb_detect_encoding($szVal,'ASCII,UTF7,UTF8,ISO-8859-1,ISO-8859-2');
					
					if($szEnc != 'ASCII' && $szEnc == 'UTF-8')
						$szVal = iconv($szEnc,'UTF-8',$szVal);

					
					
					$aLine[] = &$szVal;
				}
				

				$aTable[] = $aLine;
			}
			
			fclose($hFile);
			
			return $aTable;
		}
	}

?>